import { BasicColumn } from '/@/components/Table'
import { FormSchema } from '/@/components/Table'
import { render } from 'nprogress'
import { defHttp } from '/@/utils/http/axios'
import moment from "moment";
import { useMessage } from "/@/hooks/web/useMessage";
const { createMessage: msg } = useMessage();
// const ispeo = (type: number) => type === 0
/*
	表格列
*/
export const columns: BasicColumn[] = [
	{
		title: '所属机构', // 表格列名称
		dataIndex: 'organizationName', //表格列字段
		width: 150, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '发票代码', // 表格列名称
		dataIndex: 'code', //表格列字段
		width: 150, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '发票号码', // 表格列名称
		dataIndex: 'numbers', //表格列字段
		width: 180, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '发票类型', // 表格列名称
		dataIndex: 'typeName', //表格列字段
		width: 180, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '发票金额', // 表格列名称
		dataIndex: 'amountAll', //表格列字段
		width: 150, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '税率', // 表格列名称
		dataIndex: 'rateName', //表格列字段
		width: 150, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '销项税额', // 表格列名称
		dataIndex: 'amountTax', //表格列字段
		width: 100, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '不含税金额', // 表格列名称
		dataIndex: 'amount', //表格列字段
		width: 150, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '校验码', // 表格列名称
		dataIndex: 'checkCode', //表格列字段
		width: 180, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '开票日期', // 表格列名称
		dataIndex: 'billDate', //表格列字段
		width: 150, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '单位', // 表格列名称
		dataIndex: 'customer', //表格列字段
		width: 300, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '经办人', // 表格列名称
		dataIndex: 'employee', //表格列字段
		width: 150, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '凭证号', // 表格列名称
		dataIndex: 'voucherCode', //表格列字段
		width: 150, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '凭证日期', // 表格列名称
		dataIndex: 'voucherTime', //表格列字段
		width: 150, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
	{
		title: '备注', // 表格列名称
		dataIndex: 'remark', //表格列字段
		width: 150, // 列宽度
		align: 'center', // 列对齐方式
		resizable: true,
	},
]
/**
	新增抽屉
 */
export const formSchema: FormSchema[] = [
	{
		field: 'saoma', // 对应字段
		label: '条码扫描', //对应label
		component: 'Input', // 要使用的组件y
		colProps: {
			span: 24,
		},
		componentProps: ({ formModel }) => {
			return {
				oninput: (event) => {
					if (formModel.saoma.includes('，')) {
						let arrsCS = formModel.saoma.split('，');
						if (arrsCS.length > 7) {
							msg.error({
								content: () => "请切换成英文输入法再扫描！",
								style: {
									marginTop: '20vh',
									fontSize: '30px',
									color: 'red',
								},
							});
						}
						return;
					}


					let arrs = formModel.saoma.split(',');
					if (arrs.length < 7) {
						return;
					}
					console.log('arrs', arrs)
					if ((arrs.length === 7 && arrs[1] == "10") ||(arrs.length === 8 && arrs[1] > "20") || arrs.length === 9) {
						defHttp
							.get(
								{ url: 'api/Invoice/duplicateCheck', params: { numbers: formModel.saoma } },
								{ isTransformResponse: false },
							)
							.then((res) => {
								if (res.isSucceed == true) {
									if (res.data.ifDuplicate == true) {

										formModel.type = "";
										formModel.code = "";
										formModel.numbers = "";
										formModel.amount = 0;
										formModel.checkCode = "";
										formModel.saoma = "";
										formModel.amountAll = "";
										formModel.amountTax = "";
										//msg.error("发票号码："+arrs[3]+"重复,请检查");
										msg.error({
											content: () => "发票号码：" + arrs[3] + "重复,请检查",
											style: {
												marginTop: '20vh',
												fontSize: '30px',
												color: 'red',
											},
										});
									} else {
										formModel.type = res.data.type;
										formModel.code = res.data.code;
										formModel.numbers = res.data.numbers;
										if (res.data.type > "20") {
											formModel.amountAll = res.data.amount;
										} else {
											formModel.amount = res.data.amount;
										}
										formModel.billDate = moment(res.data.billDate);
										formModel.checkCode = res.data.checkCode;
										formModel.saoma = "";
										msg.success({
											content: () => "扫码成功",
											style: {
												marginTop: '20vh',
												fontSize: '30px',
											},
										});
										console.log('msg.success', arrs)
									}

								}
							})

					}
				},
				focus: true,
			}
		},
	},
		// 必须要有
		{
			field: 'id',
			label: '',
			component: 'Input',
			show: false,
			colProps: {
				span: 12,
			},
		},
	{
		field: 'code', // 对应字段
		label: '发票代码', //对应label
		component: 'Input', // 要使用的组件
		colProps: {
			span: 12,
		},
	},
	{
		field: 'numbers', // 对应字段
		label: '发票号码', //对应label
		required: true, // 是否必填
		component: 'Input', // 要使用的组件
		colProps: {
			span: 12,
		},
	},
	{
		field: 'type', // 对应字段
		label: '发票类型', //对应label
		component: 'rwSelect',
		required: true, // 是否必填
		colProps: {
			span: 12,
		},
		componentProps: {
			type: 'invoicetype',
			label: 'typeName',
			keyValue: 'typeCode',
			xhrParams: {
				// data: 'data',
			},
		},
	},
	{
		field: 'amount', // 对应字段
		label: '不含税金额', //对应label
		component: 'InputNumber', // 要使用的组件
		colProps: {
			span: 12,
		},
		componentProps: ({ formModel }) => {
			return {
				onchange: (event) => {
					if (formModel.type <= "20" && formModel.rate && formModel.amount) {
						formModel.amountAll = Math.floor((formModel.amount * 1 + formModel.amount * formModel.rate / 100) * 100) / 100;
						formModel.amountTax = Math.floor((formModel.amount * formModel.rate / 100) * 100) / 100;
					}
				},
			}
		},
	},
	{
		field: 'rate', // 对应字段
		label: '税率', //对应label
		component: 'rwSelect',
		colProps: {
			span: 12,
		},
		componentProps: ({ formModel }) => {
			console.log(formModel)
			return {
				type: 'rate',
				label: 'typeName',
				keyValue: 'typeCode',
				xhrParams: {
					// data: 'data',
				},
				changeHandler: (e) => {
					if (formModel.type > "20") {
						if(formModel.rate && formModel.amountAll){
							formModel.amount = Math.round((formModel.amountAll * 100/(100+ formModel.rate*1)) * 100) / 100;
							formModel.amountTax = Math.round((formModel.amountAll * 1 - formModel.amountAll * 100/(100+ formModel.rate*1)) * 100) / 100;
						}
					} else {
						if(formModel.rate && formModel.amount){
							formModel.amountAll = Math.floor((formModel.amount * 1 + formModel.amount * formModel.rate / 100) * 100) / 100;
							formModel.amountTax = Math.floor((formModel.amount * formModel.rate / 100) * 100) / 100;
						}
					}

				},
			}
		},
	},

	{
		field: 'amountTax', // 对应字段
		label: '销项税额', //对应label
		component: 'InputNumber', // 要使用的组件
		colProps: {
			span: 12,
		},
		componentProps: ({ formModel }) => {

			const { submit } = formModel
			return {
				onchange: (event) => {
					if (formModel.type > "20") {
						if (formModel.amountAll) {
							formModel.amount = formModel.amountAll * 1 - formModel.amountTax * 1;
						}
					} else {
						if (formModel.amount) {
							formModel.amountAll = formModel.amount * 1 + formModel.amountTax * 1;
						}
					}


				},
			}
		},
	},
	{
		field: 'amountAll', // 对应字段
		label: '发票金额', //对应label
		component: 'InputNumber', // 要使用的组件
		colProps: {
			span: 12,
		},
		componentProps: ({ formModel }) => {
			return {
				onchange: (event) => {
					if (formModel.type > "20" && formModel.rate && formModel.amountAll) {
						formModel.amount = Math.round((formModel.amountAll * 100/(100+ formModel.rate*1)) * 100) / 100;
						formModel.amountTax = Math.round((formModel.amountAll * 1 - formModel.amountAll * 100/(100+ formModel.rate*1)) * 100) / 100;
					}
				},
			}
		},
	},
	{
		label: '校验码',
		field: 'checkCode',
		component: 'Input', // 要使用的组件
		colProps: {
			span: 12,
		},
	},
	{
		label: '开票日期',
		field: 'billDate',
		component: 'DatePicker',
		//支持获取当前值判断触发 values代表当前表单的值
		// required: ({ values }) => {
		//   return !values.accessed;
		// },
		// componentProps: {
		// 	showTime: false,
		// 	valueFormat: 'YYYY-MM-DD',
		// },
		colProps: {
			span: 12,
		},
	},
	{
		label: '单位',
		field: 'customerId',
		component: 'rwSelect',
		colProps: {
			span: 12,
		},
		componentProps: {
			type: 'customerName',
			label: 'name',
			keyValue: 'id',
			xhrParams: {
				// data: 'data',
			},
		},
	},
	{
		label: '凭证号',
		field: 'voucherCode',
		component: 'Input',
		colProps: {
			span: 12,
		},
	},
	{
		field: 'employeeId', // 对应字段
		label: '经办人', //对应label
		component: 'rwSelect',
		colProps: {
			span: 12,
		},
		componentProps: {
			type: 'employeeName',
			label: 'name',
			keyValue: 'id',
			xhrParams: {
				// data: 'data',
			},
		},
	},

	{
		label: '凭证日期',
		field: 'voucherTime',
		component: 'DatePicker',
		colProps: {
			span: 12,
		},
	},
	{
		field: 'proUnit', // 对应字段
		label: '备注', //对应label
		// required: true,  // 是否必填
		component: 'Input', // 要使用的组件
		colProps: {
			span: 12,
		},
	},
	{
		label: '图片',
		field: 'images',
		// required: true,
		component: 'rwUpload',
		componentProps: {
			fileMax: 1,
		},
	},
]
// 搜索区域字段
export const searchFormSchema: FormSchema[] = [

	{
		field: 'type',
		label: '',
		component: 'rwSelect',
		colProps: { span: 2, xxl: 3 },
		componentProps: {
			placeholder: '发票类型',
			type: 'invoicetype',
			label: 'typeName',
			keyValue: 'typeCode',
			xhrParams: {
				// data: 'data',
			},
		},
	},

	{
		field: 'queryString',
		label: '',
		component: 'Input',
		colProps: { span: 2, xxl: 3 },
		componentProps: {
			placeholder: '发票代码/发票编号',
		},
	},
	{
		field: 'customer',
		label: '',
		component: 'Input',
		colProps: { span: 2, xxl: 3 },
		componentProps: {
			placeholder: '单位',
		},
	},
	{
		field: 'employee',
		label: '',
		component: 'Input',
		colProps: { span: 2, xxl: 3 },
		componentProps: {
			placeholder: '经办人',
		},
	},
	{
		field: 'StartEndTime',
		label: '',
		component: 'RangeDate',
		colProps: { span: 2, xxl: 3 },
		componentProps: {
			valueFormat: 'YYYY-MM-DD',
			// showTime: true,
		},
	},
]
